#include <iostream>
#include <unistd.h>
#include <string>
#include <mysql/mysql.h>

const std::string host="127.0.0.1";
const std::string user="Connector";
const std::string passwd="123456";
const std::string db="test";
const unsigned int port=3306;

int main()
{
    //std::cout<<"mysql client version"<<mysql_get_client_info()<<std::endl;

    MYSQL *my=mysql_init(nullptr); //初始化mysql
    if(nullptr==my)
    {
        std::cerr<<"init mysql error"<<std::endl; //初始化失败报错
        return 1;
    }

    //连接数据库
    if(mysql_real_connect(my,host.c_str(),user.c_str(),passwd.c_str(),db.c_str(),port,nullptr,0)==nullptr)
    {
        std::cerr<<"connect MYSQL error"<<std::endl;
        return 2; 
    }

    //设置编码
    mysql_set_character_set(my,"utf8");

    //sleep(10);
    std::cout<<"connect success"<<std::endl;

    //std::string sql;
    
    /*
    while(true)
    {
        std::cout<<"MYSQL>>>";
        if(!std::getline(std::cin,sql)||sql=="quit")
        {
            std::cout<<"bye"<<std::endl;
            break;
        }
        int n=mysql_query(my,sql.c_str());

        if(n==0) //输入成功
        {
            std::cout<<sql<<"success: "<<n<<std::endl;
        }
        else
        {
            std::cerr<<sql<<"failed: "<<n<<std::endl;
            return 3;
        }
    }
    */

    std::string sql="select * from user";
    int n=mysql_query(my,sql.c_str());

    //将数据库结果存入我们的结果集
    MYSQL_RES *res=mysql_store_result(my);
    if(nullptr==res)
    {
        std::cerr<<"mysql_store_result error"<<std::endl;
        return 4;
    }

    int rows=mysql_num_rows(res);
    int fields=mysql_num_fields(res);

    std::cout<<"行: "<<rows<<std::endl; 
    std::cout<<"列: "<<fields<<std::endl;

    //属性
    MYSQL_FIELD *fields_array=mysql_fetch_fields(res);
    for(int i=0;i<fields;i++)
    {
        std::cout<<fields_array[i].name<<"\t";
    }
    std::cout<<"\n";

    //内容
    for(int i=0;i<rows;i++)
    {
        MYSQL_ROW row=mysql_fetch_row(res);
        for(int j=0;j<fields;j++)
        { 
            std::cout<<row[j]<<"\t"; //*(row+j)
        }
        std::cout<<"\n";
    }

    mysql_free_result(res);

    mysql_close(my); //关闭mysql

    return 0;
}
